// GTY

#pragma once

#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "Engine/DataAsset.h"
#include "AttributeInfo.generated.h"

/*UI属性面板的实现步骤：
	首先我们需要通过c++去实现创建GameplayTag，这样可以在c++和UE里同时获取到Tag
	创建一个DataAsset类，用于设置tag对应的属性和显示内容
	创建AttributeMenuWidgetController实现对应逻辑
*/


/*
	FAuraAttributeInfo
    属性标签：通过 FGameplayTag 类型的 AttributeTag 存储属性标识。
	属性名称：通过 FText 类型的 AttributeName 存储属性的显示名称。
	属性描述：通过 FText 类型的 AttributeDescription 存储属性的描述信息。
	属性值：通过 float 类型的 AttributeValue 存储属性的具体数值。

GENERATED_BODY() 是 Unreal Engine 中用于生成类的宏。它主要用于自动生成与反射相关的代码，使得类可以被引擎识别和序列化。具体功能包括：
		自动生成类的构造函数和析构函数。
		注册类到引擎的反射系统。
		支持属性的序列化和反序列化。
 */
USTRUCT(BlueprintType)
struct FAuraAttributeInfo
{
	GENERATED_BODY()

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FGameplayTag AttributeTag = FGameplayTag();

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FText AttributeName = FText();

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FText AttributeDescription = FText();

	UPROPERTY(BlueprintReadOnly)
	float AttributeValue = 0.f;
};


/**
 * 
 */
UCLASS()
class AURAGAME_API UAttributeInfo : public UDataAsset
{
	GENERATED_BODY()
public:

	FAuraAttributeInfo FindAttributeInfoForTag(const FGameplayTag& AttributeTag, bool bLogNotFound = false) const;// 查找函数
	
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TArray<FAuraAttributeInfo> AttributeInformation;// 属性信息数组
};
